package org.eenie.kdassistant.float_win;

import android.app.ActivityManager;
import android.content.Context;
import android.graphics.PixelFormat;
import android.view.Gravity;
import android.view.View;


/**
 * Created by Eenie on 2017/7/31.
 * Email: eeniework@gmail.com
 * Des:
 */

public class FloatWindowManager {


    /**
     * 小悬浮窗View的实例
     */
    private static FloatWindowSmallView smallWindow;


    /**
     * 小悬浮窗View的参数
     */
    private static android.view.WindowManager.LayoutParams smallWindowParams;



    /**
     * 用于控制在屏幕上添加或移除悬浮窗
     */
    private static android.view.WindowManager mWindowManager;

    /**
     * 用于获取手机可用内存
     */
    private static ActivityManager mActivityManager;

    /**
     * 创建一个小悬浮窗。初始位置为屏幕的右部中间位置。
     *
     * @param context
     *            必须为应用程序的Context.
     */
    public static void createSmallWindow(Context context) {
        android.view.WindowManager windowManager = getWindowManager(context);
        int screenWidth = windowManager.getDefaultDisplay().getWidth();
        int screenHeight = windowManager.getDefaultDisplay().getHeight();
        if (smallWindow == null) {
            smallWindow = new FloatWindowSmallView(context);
        }


        if (smallWindowParams == null) {
            smallWindowParams = new android.view.WindowManager.LayoutParams();
            smallWindowParams.type = android.view.WindowManager.LayoutParams.TYPE_PHONE;
            smallWindowParams.format = PixelFormat.RGBA_8888;
            smallWindowParams.flags = android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
            smallWindowParams.gravity = Gravity.LEFT | Gravity.TOP;
            smallWindowParams.width = FloatWindowSmallView.viewWidth;
            smallWindowParams.height = FloatWindowSmallView.viewHeight;
            smallWindowParams.x = screenWidth;
            smallWindowParams.y = screenHeight / 2;
        }


        smallWindow.setParams(smallWindowParams);
        smallWindow.setVisibility(View.GONE);


        if (smallWindow.getParent() == null) {
            windowManager.addView(smallWindow, smallWindowParams);
        }
    }

    /**
     * 将小悬浮窗从屏幕上移除。
     *
     * @param context
     *            必须为应用程序的Context.
     */
    public static void removeSmallWindow(Context context) {
        if (smallWindow != null) {
//            android.view.WindowManager windowManager = getWindowManager(context);
//            windowManager.removeView(smallWindow);
//            smallWindow = null;


            smallWindow.setVisibility(View.GONE);
        }
    }
    public static void showSmallWindow(Context context) {
        if (smallWindow != null) {
            smallWindow.setVisibility(View.VISIBLE);
        }
    }










    /**
     * 是否有悬浮窗(包括小悬浮窗和大悬浮窗)显示在屏幕上。
     *
     * @return 有悬浮窗显示在桌面上返回true，没有的话返回false。
     */
    public static boolean isWindowShowing() {
        return smallWindow != null;
    }

    /**
     * 如果WindowManager还未创建，则创建一个新的WindowManager返回。否则返回当前已创建的WindowManager。
     *
     * @param context
     *            必须为应用程序的Context.
     * @return WindowManager的实例，用于控制在屏幕上添加或移除悬浮窗。
     */
    private static android.view.WindowManager getWindowManager(Context context) {

        if (mWindowManager == null) {
            mWindowManager = (android.view.WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        }
        return mWindowManager;
    }

    /**
     * 如果ActivityManager还未创建，则创建一个新的ActivityManager返回。否则返回当前已创建的ActivityManager。
     *
     * @param context
     *            可传入应用程序上下文。
     * @return ActivityManager的实例，用于获取手机可用内存。
     */
    private static ActivityManager getActivityManager(Context context) {
        if (mActivityManager == null) {
            mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        }



        return mActivityManager;
    }




}
